package com.lazily.final_;


/**
 * @Author: GZQ
 * @date: 2025/2/9 16:40
 * @description: final 关键字使用的注意事项和细节1
 */

public class FinalDetail01 {
	public static void main(String[] args) {
		CC cc = new CC();
		new EE().cal();
	}
}

class AA {
	/*
	final 修饰的属性, 在定义时，必须赋值(初始化), 并且以后不能在修改,赋值可以在一下三种情况
	1. 定义时：如 final double TAX_RATE = 0.08;
	2. 在构造器中
	3. 在代码块中
	* */
	public final double TAX_RATE = 0.08; // 定义时
	public final double TAX_RATE2;
	public final double TAX_RATE3;

	public AA() { // 构造器中赋值
		TAX_RATE2 = 1.1;
	}

	{ // 代码块中赋值
		TAX_RATE3 = 3.9;
	}
}

class BB {
	/*
	如果final 修饰的属性是静态的, 那么初始化的位置只能是
	1. 定义时
	2. 静态代码块中, 不能在构造器中赋值。
	* */

	public static final double TAX_RATE = 99.9;
	public static final double TAX_RATE2;

	static {
		TAX_RATE2 = 2.9;
	}

}

// final 类不能被继承, 但是可以实例化对象
final class CC {
}

// 如果类不是final类, 但是含有fianl方法, 则该方法虽然不能重写, 但是可以被继承
// 即, 任然遵守继承的机制
class DD {
	public final void cal() {
		System.out.println("cal()方法");
	}
}

class EE extends DD {

}
